package ia.programas.server;

import ia.programas.server.base.ClientConnection;
import ia.programas.server.modelo.EjecutorAplicaciones;

import java.io.IOException;
import java.net.Socket;

public class InstanciaCliente extends Thread{
	protected Socket clientSocket;
	protected ClientConnection connection;
	protected EjecutorAplicaciones ejecutor;
	
	public EjecutorAplicaciones getEjecutor() {
		return ejecutor;
	}

	public InstanciaCliente(Socket clientSocket) throws IOException{
		this.clientSocket = clientSocket;
		this.connection = new ClientConnection(clientSocket);
		this.ejecutor = new EjecutorAplicaciones(this);
	}
	
	@Override
	public void run(){
		boolean cond = true;
		ProcesadorPaquetes procesador = new ProcesadorPaquetes(this);
		
		//mandar paquete de prueba
		/*try {
			
		} catch (Throwable e1) {
			cond = false;
		}*/
		
		//empezar la comunicacion
		while(cond){
			try {
				byte[] packet = connection.getPacket();
				procesador.procesar(packet);
			} catch (Throwable e) { //hubo un error, el cliente se desconecto, o pidio ser desconectado
				cond = false;
			}
		}
		connection.close();
		AppServer.logd("Cliente desconectado: "+clientSocket.getInetAddress().getHostAddress());
	}
	
	public ClientConnection getConnection(){
		return connection;
	}
	
	public Socket getSocket(){
		return clientSocket;
	}
	
	public String getIp(){
		return clientSocket.getInetAddress().getHostAddress();
	}
}
